import java.util.*;

public class FifthWeek {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println("输入要反转的数");
        int n=in.nextInt();
        System.out.println(reverseInt(n));

        System.out.println("输入楼梯阶数");
        System.out.println(pa(3));

        n=in.nextInt();
        int nums[]=new int[n];
        for(int i=0;i<nums.length;i++) nums[i]=in.nextInt();
        System.out.println(find(nums));
        in.close();
    }
    // 求子集
    public static List<List<Integer>> find(int nums[]){
        List<List<Integer>> res = new ArrayList<>();
        res.add(new ArrayList<>());
        for(int i=0;i<nums.length;i++){
            int size=res.size();
            for(int j=0;j<size;j++){
                List<Integer> tmp=new ArrayList<>(res.get(i));
                tmp.add(nums[i]);
                res.add(tmp);
            }
        }
        return res;
    }
    /*
     System.out.print("[");
            for(int i = (int) (Math.pow(2,nums.length)-1); i>0; i--){
                System.out.print("[");
                for (int j=0;j<nums.length;j++){
                    if(((i>>j)&1)==1){
                        System.out.print(nums[j]+" ");
                    }
                }
                System.out.print("],");
            }
            System.out.print("]");
     */
    // 爬楼梯
    public static int pa(int n){
        if(n==1) return 1;
        int dp[]=new int[n+1];
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=n;i++) dp[i]=dp[i-1]+dp[i-2];
        return dp[n];
//        if(n==1||n==2) return n;
//        else{
//            return pa(n-1)+pa(n-2);
//        }
    }

    // 整数反转
    public static int reverseInt(int n){
        // 一位数反转是自身
        if(n<10&&n>-10) return n;
        boolean flag=false;
        // 负数
        if(n<0){
            flag=true;
            n*=(-1);
        }
        int i=n,sum = 0;
        while (i/10!=0){
            int mod=i%10;
            sum=sum*10+mod;
            i/=10;
        }
        sum=sum*10+i;
        if(sum>Math.pow(2,31)-1) sum=0;
        if(flag) sum*=(-1);
        return sum;
    }
}
